home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / s390 / include / asm / irqflags.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.3 KB  |  107 lines

  1. /*
  2.  *  include/asm-s390/irqflags.h
  3.  *
  4.  *    Copyright (C) IBM Corp. 2006
  5.  *    Author(s): Heiko Carstens <heiko.carstens@de.ibm.com>
  6.  */
  7.  
  8. #ifndef __ASM_IRQFLAGS_H
  9. #define __ASM_IRQFLAGS_H
  10.  
  11. #ifdef __KERNEL__
  12.  
  13. #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
  14.  
  15. /* store then or system mask. */
  16. #define __raw_local_irq_stosm(__or)                    \
  17. ({                                    \
  18.     unsigned long __mask;                        \
  19.     asm volatile(                            \
  20.         "    stosm    %0,%1"                    \
  21.         : "=Q" (__mask) : "i" (__or) : "memory");        \
  22.     __mask;                                \
  23. })
  24.  
  25. /* store then and system mask. */
  26. #define __raw_local_irq_stnsm(__and)                    \
  27. ({                                    \
  28.     unsigned long __mask;                        \
  29.     asm volatile(                            \
  30.         "    stnsm    %0,%1"                    \
  31.         : "=Q" (__mask) : "i" (__and) : "memory");        \
  32.     __mask;                                \
  33. })
  34.  
  35. /* set system mask. */
  36. #define __raw_local_irq_ssm(__mask)                    \
  37. ({                                    \
  38.     asm volatile("ssm   %0" : : "Q" (__mask) : "memory");        \
  39. })
  40.  
  41. #else /* __GNUC__ */
  42.  
  43. /* store then or system mask. */
  44. #define __raw_local_irq_stosm(__or)                    \
  45. ({                                    \
  46.     unsigned long __mask;                        \
  47.     asm volatile(                            \
  48.         "    stosm    0(%1),%2"                \
  49.         : "=m" (__mask)                        \
  50.         : "a" (&__mask), "i" (__or) : "memory");        \
  51.     __mask;                                \
  52. })
  53.  
  54. /* store then and system mask. */
  55. #define __raw_local_irq_stnsm(__and)                    \
  56. ({                                    \
  57.     unsigned long __mask;                        \
  58.     asm volatile(                            \
  59.         "    stnsm    0(%1),%2"                \
  60.         : "=m" (__mask)                        \
  61.         : "a" (&__mask), "i" (__and) : "memory");        \
  62.     __mask;                                \
  63. })
  64.  
  65. /* set system mask. */
  66. #define __raw_local_irq_ssm(__mask)                    \
  67. ({                                    \
  68.     asm volatile(                            \
  69.         "    ssm    0(%0)"                    \
  70.         : : "a" (&__mask), "m" (__mask) : "memory");        \
  71. })
  72.  
  73. #endif /* __GNUC__ */
  74.  
  75. /* interrupt control.. */
  76. static inline unsigned long raw_local_irq_enable(void)
  77. {
  78.     return __raw_local_irq_stosm(0x03);
  79. }
  80.  
  81. static inline unsigned long raw_local_irq_disable(void)
  82. {
  83.     return __raw_local_irq_stnsm(0xfc);
  84. }
  85.  
  86. #define raw_local_save_flags(x)                        \
  87. do {                                    \
  88.     typecheck(unsigned long, x);                    \
  89.     (x) = __raw_local_irq_stosm(0x00);                \
  90. } while (0)
  91.  
  92. static inline void raw_local_irq_restore(unsigned long flags)
  93. {
  94.     __raw_local_irq_ssm(flags);
  95. }
  96.  
  97. static inline int raw_irqs_disabled_flags(unsigned long flags)
  98. {
  99.     return !(flags & (3UL << (BITS_PER_LONG - 8)));
  100. }
  101.  
  102. /* For spinlocks etc */
  103. #define raw_local_irq_save(x)    ((x) = raw_local_irq_disable())
  104.  
  105. #endif /* __KERNEL__ */
  106. #endif /* __ASM_IRQFLAGS_H */
  107.